<?php
/*
	UserCake Version: 1.4
	http://usercake.com
	
	Developed by: Adam Davis
*/

class User 
{
	public $user_active = 0;
	public $clean_email;
	public $status = false;
	private $clean_password;
	public $clean_username;
	public $unclean_username;
        private $external;
	public $sql_failure = false;
	public $mail_failure = false;
	public $email_taken = false;
	public $username_taken = false;
	public $activation_token = 0;
        public $password_hash;

        public $userID = null;
        
	function __construct($user,$pass,$email,$external=false)
	{
            //Used for display only
            $this->unclean_username = $user;
            $this->external = $external;

            //Sanitize
            $this->clean_email = sanitize($email);
            $this->clean_password = trim($pass);
            $this->clean_username = sanitize($user);

            $userexists = usernameExists($this->clean_username);
            $emailexists = emailExists($this->clean_email);

            // Usuario de Twitter ya registrado, hace login
            if($external) {
                if ($emailexists){
                    $userdetails = fetchUserDetails(null, null, $this->clean_email);
                    $this->userID = $userdetails['User_ID'];
                    $this->clean_username = $userdetails['Username_Clean'];
                    $this->unclean_username = $userdetails['Username'];
                    $this->password_hash = $userdetails['Password'];
                }
                elseif ($userexists) {
                    $this->unclean_username = alternativeUsername($this->unclean_username);
                    $this->clean_username = sanitize($this->unclean_username);
                }
                $this->status = true;
            }
            elseif($userexists)
            {
                $this->username_taken = true;
            }elseif($emailexists)
            {
                $this->email_taken = true;
            }
            else
            {
                //No problems have been found.
                $this->status = true;
            }
	}
	
	public function userCakeAddUser()
	{
            global $db,$emailActivation,$websiteUrl,$db_table_prefix;

            //Prevent this function being called if there were construction errors
            if($this->status)
            {
                //Construct a secure hash for the plain text password
                $this->password_hash = generateHash($this->clean_password);

                //Construct a unique activation token
                $this->activation_token = generateActivationToken();

                //Do we need to send out an activation email?
                if(!$this->external && $emailActivation)
                {
                    //User must activate their account first
                    $this->user_active = 0;

                    $mail = new userCakeMail();

                    //Build the activation message
                    $activation_message = lang("ACTIVATION_MESSAGE",array($websiteUrl,$this->activation_token));

                    //Define more if you want to build larger structures
                    $hooks = array(
                            "searchStrs" => array("#ACTIVATION-MESSAGE","#ACTIVATION-KEY","#USERNAME#"),
                            "subjectStrs" => array($activation_message,$this->activation_token,$this->unclean_username)
                    );

                    /* Build the template - Optional, you can just use the sendMail function
                    Instead to pass a message. */
                    if(!$mail->newTemplateMsg("new-registration.txt",$hooks))
                    {
                        $this->mail_failure = true;
                    }
                    else
                    {
                        //Send the mail. Specify users email here and subject.
                        //SendMail can have a third parementer for message if you do not wish to build a template.

                        if(!$mail->sendMail($this->clean_email,"Usuario registrado"))
                        {

                            $this->mail_failure = true;
                        }
                    }
                }
                else
                {
                    //Instant account activation
                    $this->user_active = 1;
                }


                if(!$this->mail_failure)
                {
                    //Insert the user into the database providing no errors have been found.
                    $sql = "INSERT INTO `".$db_table_prefix."users` (
                                `Username`,
                                `Username_Clean`,
                                `Password`,
                                `Email`,
                                `ActivationToken`,
                                `LastActivationRequest`,
                                `LostPasswordRequest`,
                                `Active`,
                                `Group_ID`,
                                `SignUpDate`,
                                `LastSignIn`
                                )
                                VALUES (
                                '".$db->sql_escape($this->unclean_username)."',
                                '".$db->sql_escape($this->clean_username)."',
                                '".$this->password_hash."',
                                '".$db->sql_escape($this->clean_email)."',
                                '".$this->activation_token."',
                                '".time()."',
                                '0',
                                '".$this->user_active."',
                                '1',
                                '".time()."',
                                '0'
                                )";
                    $ret = $db->sql_query($sql);
                    $this->userID = $db->sql_nextid();
                    return $ret;
                }
            }
	}
}

?>